package com.ruoyi.system.mapper;

import java.util.List;
import java.util.Date;

import com.ruoyi.system.domain.SysDeviceLocation;
import org.apache.ibatis.annotations.Param;

/**
 * 设备位置信息Mapper接口
 *
 * @author ruoyi
 */
public interface SysDeviceLocationMapper {
    /**
     * 查询设备位置信息
     *
     * @param id 位置ID
     * @return 设备位置信息
     */
    SysDeviceLocation selectSysDeviceLocationById(Long id);

    /**
     * 查询设备最新位置信息
     *
     * @param deviceId 设备ID
     * @return 设备位置信息
     */
    SysDeviceLocation selectLatestLocationByDeviceId(String deviceId);

    /**
     * 查询设备位置信息列表
     *
     * @param sysDeviceLocation 设备位置信息
     * @return 设备位置信息集合
     */
    List<SysDeviceLocation> selectSysDeviceLocationList(SysDeviceLocation sysDeviceLocation);

    /**
     * 查询设备历史轨迹
     *
     * @param deviceId  设备ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 设备位置信息集合
     */
    List<SysDeviceLocation> selectDeviceTrackByTime(@Param("deviceId") String deviceId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 新增设备位置信息
     *
     * @param sysDeviceLocation 设备位置信息
     * @return 结果
     */
    int insertSysDeviceLocation(SysDeviceLocation sysDeviceLocation);

    /**
     * 修改设备位置信息
     *
     * @param sysDeviceLocation 设备位置信息
     * @return 结果
     */
    int updateSysDeviceLocation(SysDeviceLocation sysDeviceLocation);

    /**
     * 删除设备位置信息
     *
     * @param id 位置ID
     * @return 结果
     */
    int deleteSysDeviceLocationById(Long id);

    /**
     * 批量删除设备位置信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    int deleteSysDeviceLocationByIds(Long[] ids);

    /**
     * 删除指定时间之前的位置数据
     *
     * @param beforeTime 指定时间
     * @return 结果
     */
    int deleteLocationDataBeforeTime(Date beforeTime);

    /**
     * 获取指定用户和设备的GPS位置信息
     *
     * @param userId   用户ID
     * @param deviceId 设备ID
     * @return 设备位置信息
     */
    SysDeviceLocation selectLatestLocationByUserIdAndDeviceId(@Param("userId") Long userId, @Param("deviceId") Long deviceId);
}